home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / b / b.lha / B / src / bint / b2nod.h < prev    next >
Text File  |  1988-11-24  |  7KB  |  262 lines

  1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  2.  
  3. /*
  4.   $Header: b2nod.h,v 1.4 85/08/22 16:42:43 timo Exp $
  5. */
  6.  
  7. /* Units */
  8.  
  9. typedef intlet typenode;
  10.  
  11. #define _Nodetype(len)   ((len) & 0377)
  12. #define _Nbranches(len)  ((len) >> 8)
  13. #define Nodetype(v)   _Nodetype((v)->len)
  14. #define Nbranches(v)  _Nbranches((v)->len)
  15. #define Branch(v, n)  ((Ats(v)+(n)))
  16.  
  17. #define Unit(n)          (n>=HOW_TO && n<=REFINEMENT)
  18. #define Command(n)    (n>=SUITE && n<=EXTENDED_COMMAND)
  19. #define Expression(n) ((n>=TAG && n<=TAB_DIS)||(n>=TAGformal && n<=TAGzerprd))
  20. #define Comparison(n) (n>=LESS_THAN && n<=UNEQUAL)
  21.  
  22. #define HOW_TO             0
  23. #define YIELD            1
  24. #define TEST            2
  25. #define REFINEMENT        3
  26.  
  27. /* Commands */
  28.  
  29. #define SUITE            4
  30. #define PUT            5
  31. #define INSERT             6
  32. #define REMOVE             7
  33. #define CHOOSE             8
  34. #define DRAW            9
  35. #define SET_RANDOM        10
  36. #define DELETE            11
  37. #define CHECK            12
  38. #define SHARE            13
  39.  
  40. #define WRITE            14
  41. #define READ            15
  42. #define READ_RAW        16
  43.  
  44. #define IF            17
  45. #define WHILE            18
  46. #define FOR            19
  47.  
  48. #define SELECT            20
  49. #define TEST_SUITE        21
  50. #define ELSE            22
  51.  
  52. #define QUIT            23
  53. #define RETURN            24
  54. #define REPORT            25
  55. #define SUCCEED            26
  56. #define FAIL            27
  57.  
  58. #define USER_COMMAND        28
  59. #define EXTENDED_COMMAND    29
  60.  
  61. /* Expressions, targets, tests */
  62.  
  63. #define TAG            30
  64. #define COMPOUND        31
  65.  
  66. /* Expressions, targets */
  67.  
  68. #define COLLATERAL        32
  69. #define SELECTION        33
  70. #define BEHEAD            34
  71. #define CURTAIL            35
  72.  
  73. /* Expressions, tests */
  74.  
  75. #define UNPARSED        36
  76.  
  77. /* Expressions */
  78.  
  79. #define MONF            37
  80. #define DYAF            38
  81. #define NUMBER            39
  82. #define TEXT_DIS        40
  83. #define TEXT_LIT        41
  84. #define TEXT_CONV        42
  85. #define ELT_DIS            43
  86. #define LIST_DIS        44
  87. #define RANGE_DIS        45
  88. #define TAB_DIS            46
  89.  
  90. /* Tests */
  91.  
  92. #define AND            47
  93. #define OR            48
  94. #define NOT            49
  95. #define SOME_IN            50
  96. #define EACH_IN            51
  97. #define NO_IN            52
  98. #define SOME_PARSING        53
  99. #define EACH_PARSING        54
  100. #define NO_PARSING        55
  101. #define MONPRD            56
  102. #define DYAPRD            57
  103. #define LESS_THAN        58
  104. #define AT_MOST            59
  105. #define GREATER_THAN        60
  106. #define AT_LEAST        61
  107. #define EQUAL            62
  108. #define UNEQUAL            63
  109. #define Nonode            64
  110.  
  111. #define TAGformal        65
  112. #define TAGlocal        66
  113. #define TAGglobal        67
  114. #define TAGmystery        68
  115. #define TAGrefinement        69
  116. #define TAGzerfun        70
  117. #define TAGzerprd        71
  118.  
  119. #define ACTUAL            72
  120. #define FORMAL            73
  121.  
  122. value node1();
  123. value node2();
  124. value node3();
  125. value node4();
  126. value node5();
  127. value node6();
  128. value node8();
  129. value node9();
  130. typenode nodetype();
  131. /* Procedure display(); */
  132. /* Procedure fix_nodes(); */
  133.  
  134. #define First_fieldnr    0
  135.  
  136. #define UNIT_NAME    First_fieldnr
  137. #define HOW_FORMALS    First_fieldnr + 1    /* HOW'TO */
  138. #define HOW_COMMENT    First_fieldnr + 2
  139. #define HOW_SUITE    First_fieldnr + 3
  140. #define HOW_REFINEMENT    First_fieldnr + 4
  141. #define HOW_R_NAMES    First_fieldnr + 5
  142. #define HOW_NLOCALS    First_fieldnr + 6
  143. #define FPR_ADICITY    First_fieldnr + 1    /* YIELD, TEST */
  144. #define FPR_FORMALS    First_fieldnr + 2
  145. #define FPR_COMMENT    First_fieldnr + 3
  146. #define FPR_SUITE    First_fieldnr + 4
  147. #define FPR_REFINEMENT    First_fieldnr + 5
  148. #define FPR_R_NAMES    First_fieldnr + 6
  149. #define FPR_NLOCALS    First_fieldnr + 7
  150.  
  151. #define FML_KEYW    First_fieldnr        /* FORMALS HOW'TO */
  152. #define FML_TAG        First_fieldnr + 1
  153. #define FML_NEXT    First_fieldnr + 2
  154.  
  155. #define SUI_LINO    First_fieldnr        /* SUITE */
  156. #define SUI_CMD        First_fieldnr + 1
  157. #define SUI_COMMENT    First_fieldnr + 2
  158. #define SUI_NEXT    First_fieldnr + 3
  159. #define REF_NAME    First_fieldnr        /* REFINEMENT */
  160. #define REF_COMMENT    First_fieldnr + 1
  161. #define REF_SUITE    First_fieldnr + 2
  162. #define REF_NEXT    First_fieldnr + 3
  163. #define REF_START    First_fieldnr + 4
  164.  
  165. #define PUT_EXPR    First_fieldnr        /* PUT */
  166. #define PUT_TARGET    First_fieldnr + 1
  167. #define INS_EXPR    First_fieldnr        /* INSERT */
  168. #define INS_TARGET    First_fieldnr + 1
  169. #define RMV_EXPR    First_fieldnr        /* REMOVE */
  170. #define RMV_TARGET    First_fieldnr + 1
  171. #define CHS_TARGET    First_fieldnr        /* CHOOSE */
  172. #define CHS_EXPR    First_fieldnr + 1
  173. #define DRW_TARGET    First_fieldnr        /* DRAW */
  174. #define SET_EXPR    First_fieldnr        /* SET'RANDOM */
  175. #define DEL_TARGET    First_fieldnr        /* DELETE */
  176. #define CHK_TEST    First_fieldnr        /* CHECK */
  177. #define SHR_TARGET    First_fieldnr        /* SHARE */
  178.  
  179. #define WRT_L_LINES    First_fieldnr        /* WRITE */
  180. #define WRT_EXPR    First_fieldnr + 1
  181. #define WRT_R_LINES    First_fieldnr + 2
  182. #define RD_TARGET    First_fieldnr        /* READ */
  183. #define RD_EXPR        First_fieldnr + 1
  184. #define RDW_TARGET    First_fieldnr        /* READ'RAW */
  185.  
  186. #define IF_TEST        First_fieldnr        /* IF */
  187. #define IF_COMMENT    First_fieldnr + 1
  188. #define IF_SUITE    First_fieldnr + 2
  189. #define WHL_TEST    First_fieldnr        /* WHILE */
  190. #define WHL_COMMENT    First_fieldnr + 1
  191. #define WHL_SUITE    First_fieldnr + 2
  192. #define FOR_TARGET    First_fieldnr        /* FOR */
  193. #define FOR_EXPR    First_fieldnr + 1
  194. #define FOR_COMMENT    First_fieldnr + 2
  195. #define FOR_SUITE    First_fieldnr + 3
  196.  
  197. #define SLT_COMMENT    First_fieldnr        /* SELECT */
  198. #define SLT_TSUITE    First_fieldnr + 1
  199. #define TSUI_LINO    First_fieldnr        /* TEST SUITE */
  200. #define TSUI_TEST    First_fieldnr + 1
  201. #define TSUI_COMMENT    First_fieldnr + 2
  202. #define TSUI_SUITE    First_fieldnr + 3
  203. #define TSUI_NEXT    First_fieldnr + 4
  204. #define ELSE_LINO    First_fieldnr        /* ELSE */
  205. #define ELSE_COMMENT    First_fieldnr + 1
  206. #define ELSE_SUITE    First_fieldnr + 2
  207.  
  208. #define RTN_EXPR    First_fieldnr        /* RETURN */
  209. #define RPT_TEST    First_fieldnr        /* REPORT */
  210.  
  211. #define UCMD_NAME    First_fieldnr        /* USER COMMAND */
  212. #define UCMD_ACTUALS    First_fieldnr + 1
  213. #define UCMD_DEF    First_fieldnr + 2
  214. #define ACT_KEYW    First_fieldnr        /* ACTUALS USER COMMAND */
  215. #define ACT_EXPR    First_fieldnr + 1
  216. #define ACT_NEXT    First_fieldnr + 2
  217. #define ACT_START    First_fieldnr + 3
  218.  
  219. #define ECMD_NAME    First_fieldnr        /* EXTENDED COMMAND */
  220. #define ECMD_ACTUALS    First_fieldnr + 1
  221.  
  222. #define COMP_FIELD    First_fieldnr        /* COMPOUND */
  223. #define COLL_SEQ    First_fieldnr        /* COLLATERAL */
  224. #define MON_NAME    First_fieldnr        /* MONADIC FUNCTION */
  225. #define MON_RIGHT    First_fieldnr + 1
  226. #define MON_FCT        First_fieldnr + 2
  227. #define DYA_NAME    First_fieldnr + 1    /* DYADIC FUNCTION */
  228. #define DYA_LEFT    First_fieldnr
  229. #define DYA_RIGHT    First_fieldnr + 2
  230. #define DYA_FCT        First_fieldnr + 3
  231. #define TAG_NAME    First_fieldnr        /* TAG */
  232. #define TAG_ID        First_fieldnr + 1
  233. #define NUM_VALUE    First_fieldnr        /* NUMBER */
  234. #define NUM_TEXT    First_fieldnr + 1
  235. #define XDIS_QUOTE    First_fieldnr        /* TEXT DIS */
  236. #define XDIS_NEXT    First_fieldnr + 1
  237. #define XLIT_TEXT    First_fieldnr        /* TEXT LIT */
  238. #define XLIT_NEXT    First_fieldnr + 1
  239. #define XCON_EXPR    First_fieldnr        /* TEXT CONV */
  240. #define XCON_NEXT    First_fieldnr + 1
  241. #define LDIS_SEQ    First_fieldnr        /* LIST DIS */
  242. #define RDIS_LWB    First_fieldnr        /* RANGE DIS */
  243. #define RDIS_UPB    First_fieldnr + 1
  244. #define TDIS_SEQ    First_fieldnr        /* TAB_DIS */
  245. #define SEL_TABLE    First_fieldnr        /* SELECTION */
  246. #define SEL_KEY        First_fieldnr + 1
  247. #define TRIM_LEFT    First_fieldnr        /* BEHEAD, CURTAIL */
  248. #define TRIM_RIGHT    First_fieldnr + 1
  249. #define UNP_SEQ        First_fieldnr        /* UNPARSED */
  250. #define UNP_TEXT    First_fieldnr + 1
  251.  
  252. #define AND_LEFT    First_fieldnr        /* AND */
  253. #define AND_RIGHT    First_fieldnr + 1
  254. #define OR_LEFT        First_fieldnr        /* OR */
  255. #define OR_RIGHT    First_fieldnr + 1
  256. #define NOT_RIGHT    First_fieldnr        /* NOT */
  257. #define QUA_TARGET    First_fieldnr        /* QUANTIFICATION */
  258. #define QUA_EXPR    First_fieldnr + 1
  259. #define QUA_TEST    First_fieldnr + 2
  260. #define REL_LEFT    First_fieldnr        /* ORDER TEST */
  261. #define REL_RIGHT    First_fieldnr + 1
  262.